#include <iostream>
#include <cstring>

#define MAX_SIZE 100

using namespace std;
 
int matrix[MAX_SIZE+10][MAX_SIZE+10];
int num[MAX_SIZE+10];
int N, M;
int K;
 
// 合并成一维数组 
void merge(int i, int j) {
	for(int p = 0; p < N; p++) {
		for(int k = i; k <= j; k++) {
			num[p] += matrix[p][k];  
	 	}
	}
}
 
int findShortest(){
	int start = 0, end = 0;
	int sum = 0;
	int len = N;
	int ans = len + 1; 
	bool flag = false;
	while(end < len){
		if(sum < K){
			sum += num[end];
		}
		while(sum >= K){
			flag = true;
			ans = min(ans, end-start+1);
			sum -= num[start++];
		}
		end ++;
	}
	if(flag)
		return ans;
	else
		return N*M;    //全部加起来值都没超过K 
}
 
int main(){
	while(cin >> N >> M) {
		cin >> K;
		int sum = 0;
		for(int i = 0; i < N; i++) {
			for(int j = 0; j < M; j++) {
				cin >> matrix[i][j];
				sum += matrix[i][j];
			}
		}
		if(sum < K)
			cout << -1 << endl;
		else {
			int min_element = N * M;
			for(int i = 0; i < M; i++) {
				for(int j = i; j < M; j++) {
					memset(num, 0, sizeof(num));
					merge(i, j);
					int temp = findShortest();
					temp = (j - i + 1) * temp;
					if(temp < min_element)
						min_element = temp;
				}
			}
			cout << min_element << endl;
		}	
	}
	return 0;
}
